回调函数

177次阅读

共计 618 个字符,预计需要花费 2 分钟才能阅读完成。

#define CALL_FUN_PTR(fun) ((void (*)(void))fun)()
CALL_FUN_PTR 用于定义一个函数指针,以调用一个不带参数且返回类型为 void 的函数
  • #define CALL_FUN_PTR(fun): 定义一个名为 CALL_FUN_PTR 的宏,接受一个参数 fun
  • (void (*)(void))fun: 这部分将 fun 转换为一个指向不带参数且返回 void 的函数的指针。
  • (): 这部分调用刚刚转换的函数指针。

 

使用示例

下面是一个在 C 程序中使用这个宏的例子:

#include <stdio.h>

// 示例函数
void my_function() {printf("Hello from my_function!\n");
}

int main() {
// 使用宏调用 my_function
CALL_FUN_PTR(my_function);
return 0;
}

 

注意事项

  1. 函数签名 : 确保传递给 CALL_FUN_PTR 的函数确实符合 void function_name(void) 的签名。如果函数有参数或返回不同类型,可能会导致未定义行为。
  2. 类型转换 : 由于 C 不允许函数类型之间的隐式转换,因此需要进行显式的类型转换。
  3. 错误处理 : 如果传递了一个空指针或与预期签名不匹配的函数,可能会导致运行时错误。在调用之前,确保函数指针有效是个好习惯。
  4. 可读性 : 虽然宏很强大,但也可能使代码变得难以阅读和调试。在更复杂的场景中,考虑使用内联函数或常规函数指针。

 

 

 

正文完
 0